Ordinary
About

Gradle 종속성 관리

profileordilov / 2022. 3. 14

Gradle 종속성 관리

  • compileOnly : 프로덕션 코드를 컴파일하는 데만 사용
  • implementation (compile 대체): 컴파일 및 런타임에 사용
  • runtimeOnly (runtime 대체): 컴파일이 아닌 런타임에만 사용됨
  • testCompileOnly: compileOnly와 기능은 같지만 테스트 용도
  • testImplementation: implementation와 기능은 같지만 테스트 용도
  • testRuntimeOnly: runtimeOnly와 기능은 같지만 테스트 용도

gradle-config 기본적인 자바 프로젝트에서 사용할 때 필요한 종속성 관리 명령어들입니다.

compile이 대체된 이유

compile이 사용되다가 deprecated 된 이유는 종속성을 구분하지 못해서입니다. 종속성을 두 가지 종류로 나눌 수 있습니다.

  • 프로젝트를 빌드하는데 필요한 종속성
  • 프로젝트에서 사용하는 라이브러리를 빌드하는데 필요한 종속성

compile은 이 둘을 분리하지 않았고 모듈 하나를 변경하면 그 영향 범위가 크게 퍼졌습니다. 이 기능은 api로 비슷하게 가능해지고 대부분의 상황에서 사용하지 않습니다. 이유는 두 종속성을 분리한 이유처럼 영향 범위가 넓어서입니다. api는 공개 되어 있어서 직접 참조하는 모듈이 아니라도 사용할 수 있습니다. 반대로 implementation은 직접 참조하는 모듈이 아니면 막혀있기 때문에 사용할 수 없습니다.

이 결과로 빌드 시간이 달라집니다. compile이나 api의 경우 어떤 모듈을 변경하면 그 모듈을 의존하는 모든 자식을 빌드해야 합니다. 하지만 implementation은 의존성이 수정되어도 직접 의존하는 모듈이 수정될 때만 빌드합니다. 당연히 implementation이 더 작은 규모를 빌드하기 때문에 속도가 향상됩니다. 보안에 있어서도 api는 직접 참조하는 모듈이 아닌 모듈에서도 사용할 수 있는 위험이 있습니다.

따라서 특수한 경우가 아니라면 implementation을 사용해야 합니다.

참고

Gradle 공식 문서